package ElementosLogicos;

import java.util.ArrayList;

public class Estado {
	private String nome;
	private char entrada;
	private ArrayList<Estado> proximos = new ArrayList<Estado>();
	private ArrayList<Transicao> transicoes = new ArrayList<Transicao>();
	private boolean aceito;

	public Estado(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public boolean getFinal() {
		return aceito;
	}

	public void setFinal(boolean aceito) {
		this.aceito = aceito;
	}

	public ArrayList<Transicao> getTransicao() {
		return transicoes;
	}

	public void geraTransicao(char entrada, Estado proximo) {
		Transicao tr = new Transicao(entrada, proximo);
		transicoes.add(tr);
	}

	// verifica se ha transicao para uma entrada
	public boolean entradaReconhecida(char entrada) {
		int k = transicoes.size();
		for (int i = 0; i < k; i++) {
			if (transicoes.get(i).getEntrada() == entrada)
				return true;
		}
		return false;
	}

	// verifica transicao a partir de uma entrada
	public ArrayList<Estado> transicao(char entrada) {
		for (int i = 0; i < transicoes.size(); i++) {
			Transicao tr = transicoes.get(i);
			this.entrada = tr.getEntrada();
			Estado es = tr.getEstado();
			if (this.entrada == entrada)
				proximos.add(es);
		}
		return proximos;
	}

	public String print() {
		String msg = "";
		for (int i = 0; i < this.transicoes.size(); i++) {
			Transicao tr = transicoes.get(i);
			msg += "d(" + nome + tr.toString() + "\n";
		}
		return msg;
	}

	public String toString() {
		String msg = "";
		for (int i = 0; i < this.transicoes.size(); i++) {
			Transicao tr = transicoes.get(i);
			msg += nome + tr.toString() + "\n";
		}
		return msg;
	}
}
